//
//  HYOauthViewController.swift
//  weibo-01
//
//  Created by 源 何 on 16/9/25.
//  Copyright © 2016年 何源. All rights reserved.
//

import UIKit
import SVProgressHUD
class HYOauthViewController: UIViewController {
    
    lazy var webView = UIWebView()
    
    override func loadView() {
        
        //解决webView没有数据的时候,底部的黑条
        //isOpaque 不透明的
        webView.isOpaque = false
        
        view = webView
        
        //设置代理
        webView.delegate = self
        //设置背景颜色
        view.backgroundColor = UIColor.red
        
        setNavBar()
        
        //加载授权页面
        loadOAuthPage()
    }

    //设置导航条
    private func setNavBar() {
        
        //图片名称不能够传空字符串 不然那会有警报 Cactlog UI
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "关闭", imageName: nil, target: self, action: #selector(close))
        
        //FIXME: - 上线的时候注意将方法注销掉
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", imageName: nil, target: self, action: #selector(fillAccount))
    }
    
    @objc private func fillAccount() {
        //webView  执行js
        let jsString = "document.getElementById('userId').value = '771696238@qq.com', document.getElementById('passwd').value = 'hy4161516!!' "
        webView.stringByEvaluatingJavaScript(from: jsString)
    }
    
    //按钮的监听事件
    @objc private func close() {
        
        //实现dismiss
        dismiss(animated: true, completion: nil)
    }

    private func loadOAuthPage() {
        
        let urlString = "https://api.weibo.com/oauth2/authorize?" + "client_id=" + client_id + "&redirect_uri=" + redirect_uri
        
        let url = URL(string: urlString)
        
        let req = URLRequest(url: url!)
        //加载界面
        webView.loadRequest(req)
        
        //loadAccessToken
//        loadAccessToken()
    }
}

extension HYOauthViewController: UIWebViewDelegate{
    
    //实现协议方法
    func webViewDidStartLoad(_ webView: UIWebView) {
        //开始加载界面
        //显示等待指示器
        SVProgressHUD.show()
    }
    
    func webViewDidFinishLoad(_ webView: UIWebView) {
        //加载完成
        //关闭等待指示器
        SVProgressHUD.dismiss()
    }
    
    //网页每次加载新的页面实际上都是重写发送了request 在该方法中就可以拦截该请求
    //该协议方法的返回值是bool类型 如果返回true 该控件可以正常使用 否则就不能够正常
    //js -> 调用本地代码: 点击webView内的一个元素 -> 发起request, 包含url -> 截取url中的特殊的标记 -> 拦截跳转本地页面
    //本地调用 js: 利用这个方法stringByEvaluatingJavaScript
    //其他高级功能就可以使用框架 javaScripCore
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        //截取重定向 url 中的 code
        //绝对路径 url 对象的 String 形式
        let urlString = request.url?.absoluteString ?? ""
        
        //如果urlString 中包含了 重定向地址 就认为授权成功 就可以 截取code
        let flag = "code="
        if urlString.contains(flag) {
            //只完成截取code操作
            
            //获取url的参数部分
            let query = request.url?.query ?? ""
            
            let code = (query as NSString).substring(from: flag.characters.count)
            
            //利用code 请求 token
            //成功了之后需要加载itheima.com
//            loadAccessToken(code: code)
            HYUserAccountViewModel.sharedAccountViewModel.loadAccessToken(code: code, finished: { (success) in
                //如果失败
                
                if !success {
//                    SVProgressHUD.showError(withStatus: "世界上最遥远的距离就是没有网络")
                    SVProgressHUD.showError(withStatus: errorTip)
                    
                    return
                }
                print("登录获取用户信息成功")
                //如果成功
                //modal 一个欢迎界面的控制器
                //不建议使用modal的方式切换视图控制器 而是应该切换根视图控制器
                //也不建议使用者两种方式切换
                //表示哪个对象发出的通知 一般用这个参数来传递参数
                NotificationCenter.default.post(name: NSNotification.Name(KchangeRootViewController), object: "Welcome")
            })
            return false
        }
        return true
    }
}
